フロッピーディスクイメージファイルの基礎と応用

                →余談をいっぱい散りばめて

                                                編集部:舩本昇竜


 EX68で扱われる2HDディスクイメージファイルは、文字通り、2HDフロッピーデ ィスクの内容をまるごと抜き取り、1つのファイルにしたものです。  と、論理的な説明はこれで十分なのですが、せっかくの機会なので、もう少し フロッピーについての低レベル(ハードウェアより)な点をおさえましょう。な お、ここでいうFDとは、特にことわりのない限り、X680x0で使用される5インチ 2HD(1.2MB)を指します。 ○解析屋用語と実際用語の微妙な違い  まず、素朴な疑問の回答にもなる事実ですが、FDは、表裏、2つのヘッド(読 書装置)を持ち、両面記録を行います。また、両面とも、「トラック」という単 位で77等分されています。つまり、1つのFDには「154のトラック」が存在 することになります。    →特殊な方法で、FDに155以上のトラックを作り、それをチェックする 「オーバートラック」というプロテクトが存在します(しました?)。  ここで少し問題となるのが、このトラックの考え方といいますか、数え方。FD のトラックは、 片面77のトラックが2面ある:77×2 のではなく、 両面(サイド0+サイド1)に77トラックがある:2×77 となります(ちなみに「サイド0」はディスクの表をあらわし、「サイド1」は ディスクの裏をあらわします)。  そもそも、FDのヘッドは表と裏の2つありますが、ヘッドを動かす軸は1つし かありません(ですから、サイド0/サイド1という考えでアクセスを行うのは 「損」なのです)。実際、FDを先頭から順番にアクセスするようプログラムを組 むと、 サイド0のトラック0 (0) サイド1のトラック0 (1) サイド0のトラック1 (2) サイド1のトラック1 (3) : : : : サイド0のトラック76 (152) サイド1のトラック76 (153) という順番でアクセスされます。この時、アクセス順に番号をふると、それぞれ のトラックには0から153の番号が付きます(便宜上、私はこの番号を「解析 屋用トラック」と呼んだりもしています。以後もことわりのない限りこちらを使 用します)。経験的に、普段(?)、この0~153という番号を良く使います が、プログラミングの際には、どうしても「サイド」に関するパラメータが必要 となります。ですから、両者の関係はキチンと押さえておきましょう。 ○さらにこまかく  結局のトコロ、2HDイメージファイルといわれる「まるまる読み込まれたFDの 内容」とは、FDのトラック0からトラック153まで、順番に読み込まれた内容 を指します。  さて、これらトラックは、さらに小さな「セクタ」と単位に分解することがで きます(実際には、さらに細かく分類することも出来ますが、基本的に、分解出 来きる最小単位が「セクタ」と考えていいでしょう)。    →他に分解されるデータとして、ギャップ(GAP)、アドレスマーク(IDAM) やCRCなどがあります。 カタめのFDのコピープロテクトの多くは、「読み込めても書き込めない」 これらの情報を特殊な装置で書き込むことで実現されていました。  具体的には、トラックは、8つのセクタに分解されます。つまり、FDは、12 32(=154×8)のセクタで構成されています(トラックと同様に、セクタ番号0~ 1231であらわすコトもあります)。また、1つのセクタは1024バイトで構成 されているので、FDの容量は約1.2Mバイト(1261568バイト=1024×1232)となりま す。    →例えば、DRIVE.XでFDを調べた時、 A: 2HD(1MB) ユニット番号・・・・ 0 1セクタあたりのバイト数・・・・・・・・・・・・・・・・ 1024 と表示されます。 ○お互いの都合  疑問に思う人もいるとは思います。「なぜ、トラック>セクタと階層構造をと らなくてはならないのか?」。これは、「FD(ハードウェア)にとって都合のよ い分割方法がトラック」「ユーザー(ソフトウェア)にとって都合のよいサイズ がセクタ」であり、両者の利害の差が出たと考えると納得出来るでしょう。  例えば、ハードウェアの都合でトラックは154必要ですが、セクタに関して は、1セクタサイズを小さくしてセクタ数を増やすことも出来ます。    →ちょっとウソっぽいですが、普通はこのような認識で十分です。    →この例もやりすぎるとプロテクトになり、なかには、1トラックに24 セクタ!なんてものもありました。 ○ FDIMG.Xの使い方  実際に2HDディスクイメージファイルを生成するプログラムの1つに、FDIMG.X があります(「電脳倶楽部」の名の付く全てのCD-ROMに掲載されています)。  元々、「すてきな電脳倶楽部」の起動ディスク用を作成するために用意したプ ログラムのため、かなり限定した仕様となっております。ご了承おば。 @>FDIMG  カレントにある、2HDイメージファイル「FDIMG.BIN」を読み込み、ド ライブ0に挿入されているFDに書き出します。  (大抵の場合、FDIMG.BINの中身は電脳倶楽部の起動ディスク) ---------------------------------------------------------------- @>FDIMG -r [filename.2HD]  ドライブ0に挿入されているFDを読み込み、2HDイメージファイル 「filename.2HD」を生成します。filename.2HD省略時は、「fdimg.bin」 となります。必ず、HD上で実行してください。 @>FDIMG filename.2HD  2HDイメージファイル「filename.2HD」を読み込み、ドライブ0に挿 入されているFDに書き出します。 ○最後に雑談  さて、みなさん。FDは、どうやってデジタルデータを記録しているかご存じで すか? X680x0のFDの場合、MFMという記録方法を採用しているのですが、実は、 後ろの2文字の"FM"は、あのFMラジオと同じFMの意味があります。つまり、FDの 円盤に記録されている「本当のデータ」は、実はアナログなのです。???ちょ っとこんがらがってきましたね。  その仕掛を大雑把に解説すると、全然違う「0を表すアナログ波形」「1を表 すアナログ波形」の2種類が用意され、書き込み時は、入力されたビット列に従 い、それぞれの波形をアナログで記録します。また、読み込み時は、その記録さ れたアナログ信号を読み取り、「どちらの波形に近いか」を判断し、0か1を出 力します。  ポイントは、両者の波形は「全然違う」というトコロにあり、あくまでも「0 か1のどちらの波形に近いか」を判断するので、記録されたアナログデータが多 少変形劣化した程度であれば、問題なく0か1を判定することが出来るのです。    →FD用スマートメディアアダプタという製品がありますが、まさにあのア ダプタは、メディア内のデジタルデータを、MFM形式で読み取ることの 出来るアナログデータに変換する装置です。FDドライブはそのアダプタ が出力したアナログデータを読み込み、0/1を判定し、デジタルデー タを出力します。つまり、デジタルメディアに納められたデジタルデー タを読み込む為に、アナログ操作を2回行っているのです。 (EOF)